package com.ljf.daily.costmanagement.service;

import com.ljf.common.exception.ServiceException;
import com.ljf.common.result.ServiceResultModel;
import com.ljf.common.service.IBasisService;
import com.ljf.config.vo.ConfigDatRecordSymbolVO;
import com.ljf.daily.costmanagement.dto.command.DailyDatCostManagementCommand;
import com.ljf.daily.costmanagement.dto.command.DailyDatCostManagementConfigCommand;
import com.ljf.daily.costmanagement.dto.command.DailyDatCostManagementDetailCommand;
import com.ljf.daily.costmanagement.dto.query.DailyDatCostManagementDetailOperateQuery;
import com.ljf.daily.costmanagement.dto.query.DailyDatCostManagementDetailQuery;
import com.ljf.daily.costmanagement.dto.query.DailyDatCostManagementQuery;
import com.ljf.daily.costmanagement.vo.DailyDatCostManagementConfigVO;
import com.ljf.daily.costmanagement.vo.DailyDatCostManagementDetailOperateVO;
import com.ljf.daily.costmanagement.vo.DailyDatCostManagementDetailVO;
import com.ljf.daily.costmanagement.vo.DailyDatCostManagementVO;

/**
 * 费用管理  服务接口定义
 * 
 * @author LJF
 * @since 2025-03-30
 */
public interface IDailyDatCostManagementService extends IBasisService<DailyDatCostManagementQuery, DailyDatCostManagementVO, DailyDatCostManagementCommand> {

    /**
     * 更新待摊费用配置
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel editConfig(DailyDatCostManagementConfigCommand command) throws ServiceException;

    /**
     * 根据ID查询待摊费用配置
     *
     * @param id
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<DailyDatCostManagementConfigVO> queryConfigById(Long id) throws ServiceException;

    /**
     * 新增费用明细
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel addDetail(DailyDatCostManagementDetailCommand command) throws ServiceException;

    /**
     * 删除费用明细
     *
     * @param id
     * @return
     * @throws ServiceException
     */
    ServiceResultModel deleteDetail(Long id) throws ServiceException;

    /**
     * 更新费用明细
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel editDetail(DailyDatCostManagementDetailCommand command) throws ServiceException;

    /**
     * 分页查询费用明细
     *
     * @param query
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<DailyDatCostManagementDetailVO> queryDetail(DailyDatCostManagementDetailQuery query) throws ServiceException;

    /**
     * 根据ID查询费用明细
     *
     * @param id
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<DailyDatCostManagementDetailVO> queryDetailById(Long id) throws ServiceException;

    /**
     * 消耗费用明细
     *
     * @param command
     * @return
     * @throws ServiceException
     */
    ServiceResultModel consumeDetail(DailyDatCostManagementDetailCommand command) throws ServiceException;

    /**
     * 查询费用管理标签
     *
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<ConfigDatRecordSymbolVO> querySymbol() throws ServiceException;

    /**
     * 分页查询活动费用管理
     *
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<DailyDatCostManagementVO> queryActivityList() throws ServiceException;

    /**
     * 分页查询费用明细操作
     *
     * @param query
     * @return
     * @throws ServiceException
     */
    ServiceResultModel<DailyDatCostManagementDetailOperateVO> queryDetailOperate(DailyDatCostManagementDetailOperateQuery query) throws ServiceException;

}
